home *** CD-ROM | disk | FTP | other *** search
/ Die Ultimative Software-P…i Collection 1996 & 1997 / Die Ultimative Software-Pakete CD-ROM fur Atari Collection 1996 & 1997.iso / i / internet / software / netstsr / tcp.h < prev    next >
Encoding:
C/C++ Source or Header  |  1993-02-19  |  5.1 KB  |  179 lines

  1. #ifndef _INET_TCP
  2. #define _INET_TCP
  3.  
  4. #ifndef _INET_PKT
  5. #include "pktdrv.h"
  6. #endif
  7.  
  8. #ifndef _INET_IP
  9. #include "ip.h"
  10. #endif
  11.  
  12. #ifndef _INET_QUEUE
  13. #include "queue.h"
  14. #endif
  15.  
  16. #ifndef _INET_TIMER
  17. #include "timer.h"
  18. #endif
  19.  
  20. #ifndef _INET_ICUST
  21. #include "inetcust.h"
  22. #endif
  23.  
  24. typedef struct                 /* tcp header */
  25. {
  26.     u_short    src_port;        /* source port number */
  27.     u_short    dst_port;        /* destination port numbe */
  28.     u_long    seq;            /* sequence number of sent data */
  29.     u_long    ack;            /* ack number acking my sent data */
  30.     u_char    doffs;            /* data offset */
  31.     u_char    flags;            /* flags */
  32.     u_short    window;            /* windowsize of sender of this packet */
  33.     u_short    chksum;            /* checksum of tcp header, pseudoheader & data */
  34.     u_short    urgent;            /* urgent pointer:offset from seq num */
  35. } TCP;
  36.  
  37. #ifndef __TCP_PSEUDO
  38. #define __TCP_PSEUDO
  39.  
  40. typedef struct                 /* tcp pseudoheader */
  41. {
  42.     INADDR    src;            /* source internet addr */
  43.     INADDR    dst;            /* destination internet addr */
  44.     u_short    protocol;        /* used protocol (hibyte must be zero!!) */
  45.     u_short    length;            /* length of tcp header + tcp data */
  46. } TCP_PSEUDO;
  47. #endif
  48.  
  49. typedef struct                /* tcp option */
  50. {
  51.     u_char    opt;            /* kind of option */
  52.     u_char    length;            /* length of option incl. opt,length and data */
  53.     u_short    data;            /* option data */
  54. } TCP_OPT;
  55.  
  56. #define TCP_OPTEOL        0
  57. #define TCP_OPTNOP        1
  58. #define TCP_OPTMAXSEG    2
  59. #define TCP_DATAOFFS    0x50
  60. #define TCP_DATAOFFSINCR     0x10
  61.  
  62.             /* flags in the tcp header */
  63. #define    TCP_FIN        0x01
  64. #define    TCP_SYN        0x02
  65. #define    TCP_RST        0x04
  66. #define    TCP_PUSH    0x08
  67. #define    TCP_ACK        0x10
  68. #define    TCP_URG        0x20
  69. #define TCP_UNSENT    0x100
  70.  
  71. #define tcp_hdrlen(tp)    ( (u_short)( (((TCP *)(tp))->doffs)) >> 2)
  72.  
  73.  
  74.  
  75.                 /* tcp states */
  76. #define TCP_CLOSED    0        /* finack received (fictive) */
  77. #define TCP_LISTEN    1        /* listening for connection */
  78. #define TCP_SYNSENT    2        /* syn sent, active open */
  79. #define TCP_SYNREC    3        /* syn received, synack+syn sent. */
  80. #define TCP_ESTAB    4        /* established */
  81. #define TCP_FINWT1    5        /* sent FIN */
  82. #define TCP_FINWT2    6        /* sent FIN, received FINACK */
  83. #define TCP_CLOSEWT    7        /* received FIN waiting for close */
  84. #define TCP_CLOSING    8        /* sent FIN, received FIN (waiting for FINACK) */
  85. #define TCP_LASTACK    9        /* fin received, finack+fin sent */
  86. #define TCP_TIMEWT    10        /* dally after sending final FINACK */
  87.  
  88.  
  89. #define MAXTCPSEG    (MAXIPSEG-sizeof(IP)-sizeof(TCP))
  90.  
  91. typedef struct
  92. {
  93.     ETH            et;
  94.     IP            ip;
  95.     TCP            tcp;
  96.     long    opt;
  97. } TCP_PACKET;
  98.  
  99. #define tcp_option(o,l,d) (((long)(o)<<24) + ((long)(l)<<16) + (d))
  100.  
  101. typedef struct _tcp_seg
  102. {
  103.     struct _tcp_seg *next;    /* link to next segment */
  104.     u_long        seq;        /* sequence number of this segment */
  105.     u_short        length;        /* datasize of this segment */
  106.     u_short        flags;        /* flags to send */
  107. } TCP_SEGMENT;
  108.  
  109. typedef int (*TCP_UPCALL)(int,char *,int);
  110.  
  111.         /* upcall codes if datapointer in upcall is NULL */
  112. #define TCP_UCESTAB        -1
  113. #define TCP_UCRESET        -2
  114. #define TCP_UCCLOSING    -3
  115. #define TCP_UCTIMEOUT    -4
  116. #define TCP_UCDATA        -5
  117. #define TCP_UCCLOSEWT    -6
  118. #define TCP_UCCLOSED    -7
  119. #define TCP_UNREACHABLE    -8
  120.  
  121.  
  122. typedef struct _tcp_tcb
  123. {
  124.     struct _tcp_tcb *next;    /* link to next tcb */
  125.     int            handle;
  126.     int            active;        /* this connection is active/listening only */
  127.     u_short        lcl_port;    /* my portnumber */
  128.     u_short        fgn_port;    /* portnumber of foreign host */
  129.     u_short        state;        /* state of transmission */
  130.     INADDR        fhost;        /* address of foreign host */
  131.     TCP_SEGMENT    *resend;    /* retransmission queue */
  132.     TCP_QUEUE    q_out;        /* output queue */
  133.     TCP_QUEUE    q_in;        /* input queue */
  134.     u_long        snduna;        /* sequence nr of last unack'ed octet */
  135.     u_long        sndnxt;        /* next sequence nr to put into retr. queue */
  136.     u_short        sndwnd;        /* windowsize of foreign host */
  137.     u_short        sndup;        /* urgent pointer */
  138.     u_long        sndwl1;        /* last seq num for update of window */
  139.     u_long        sndwl2;        /* last ack of last window update */
  140.     u_long        sndiss;        /* initial send seq num */
  141.     u_long        rcvnxt;        /* seq number awaited on next packet */
  142.     u_short        rcvwnd;        /* receive window (my room in input queue */
  143.     u_short        rcvup;        /* receive urgent pointer */
  144.     u_long        rcvirs;        /* initial receive sequence num */
  145.     u_long        finack;        /* seq num to ack fin */
  146.     u_long        timeout;    /* timeout value */
  147.     TIMER        tcp_tm;        /* timer allocated for this connection */
  148.     TIMER        tcp_tmresend;  /* retransmit timer */
  149.     TCP_UPCALL    upcall;        /* function to upcall on event */
  150. } TCP_TCB;
  151.  
  152.  
  153.  
  154. #define TCP_DEFMAXTCPS    20        /* default number of possible TCP connections */
  155.  
  156. #define TCP_RETRANSMIT    (200L*1)    /* = 1 sec */
  157. #define TCP_OPENTIMEOUT (200L*5)    /* = 5 sec */
  158. #define TCP_WAITTIMEOUT (200L*20)    /* = 20 sec */
  159. #define TCP_ACKTIMEOUT  (10)        /* = 1/20 sec */
  160.  
  161.  
  162. int tcp_init(INETCUST *);
  163. int tcp_exit(void);
  164.  
  165.  
  166. TCP_TCB *tcp_gettcb(int tcb);
  167. int tcp_create(long,long, TCP_UPCALL);
  168. int tcp_delete(int tcb);
  169. int tcp_open(int tcb,INADDR fhost,u_short port,u_long timeout);
  170. int tcp_bind(int tcb,u_short lcl_port);
  171. int tcp_listen(int tcb,u_short lcl_port, u_long timeout);
  172. int tcp_close(int tcb);
  173. int tcp_abort(int tcb);
  174. long tcp_write(int tcb, char *buffer, u_short len, u_char flags);
  175. long tcp_read(int tcb, char *buffer, u_short len);
  176. u_short tcp_newport(void);
  177.  
  178.  
  179. #endif